package com.ruoyi.system.service.aggregation;

import java.math.BigDecimal;
import java.util.Map;

/**
 * 分润计算服务接口
 * 
 * @author ruoyi
 * @date 2025-01-10
 */
public interface IProfitSharingService 
{
    /**
     * 计算异业联盟分润
     * 
     * @param merchantId 商家ID
     * @param orderAmount 订单金额
     * @param userId 用户ID
     * @return 分润结果
     */
    public Map<String, Object> calculateInterIndustryProfit(Long merchantId, BigDecimal orderAmount, Long userId);

    /**
     * 计算广告收益分润
     * 
     * @param merchantId 商家ID（用户绑定的商家）
     * @param adRevenue 广告收益金额
     * @param userId 用户ID
     * @return 分润结果
     */
    public Map<String, Object> calculateAdRevenueProfit(Long merchantId, BigDecimal adRevenue, Long userId);

    /**
     * 执行分润到账
     * 
     * @param profitResult 分润计算结果
     * @param profitType 分润类型：inter_industry-异业联盟, ad_revenue-广告收益
     * @return 执行结果
     */
    public boolean executeProfitSharing(Map<String, Object> profitResult, String profitType);

    /**
     * 验证广告观看完整性
     * 
     * @param userId 用户ID
     * @param watchDuration 观看时长（秒）
     * @param merchantId 商家ID
     * @return 验证结果
     */
    public boolean validateAdWatchComplete(Long userId, Integer watchDuration, Long merchantId);

    /**
     * 记录广告观看并获得奖励
     * 
     * @param userId 用户ID
     * @param merchantId 商家ID
     * @param adPlatform 广告平台
     * @param adType 广告类型
     * @param adId 广告ID
     * @param watchDuration 观看时长
     * @param isComplete 是否完整观看
     * @param ipAddress IP地址
     * @param deviceInfo 设备信息
     * @return 奖励结果
     */
    public Map<String, Object> recordAdWatchAndReward(Long userId, Long merchantId, String adPlatform, 
                                                     String adType, String adId, Integer watchDuration, 
                                                     Boolean isComplete, String ipAddress, String deviceInfo);

    /**
     * 检查用户每日广告奖励次数
     * 
     * @param userId 用户ID
     * @return 今日已观看次数
     */
    public int getTodayAdWatchCount(Long userId);

    /**
     * 获取商家分润配置
     * 
     * @param merchantId 商家ID
     * @return 分润配置
     */
    public Map<String, Object> getMerchantProfitConfig(Long merchantId);

    /**
     * 更新商家锁定用户数量
     * 
     * @param merchantId 商家ID
     * @param increment 增量（正数增加，负数减少）
     * @return 更新结果
     */
    public boolean updateMerchantLockUserCount(Long merchantId, int increment);
}
